package com.demo.service;

import com.demo.entity.Video;
import com.demo.mapper.VideoMapper;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Data
@Service   //告诉扫描包的时候，我愿意被接管
public class VideoServiceImpl implements VideoService {

//    1. 实现接口
//    2. 实现方法，快捷方式，将光标停在类名波浪线上，按ALT+回车，选择实现方法
//    3. 将mapper，通过属性自动装配的方式，注入进来
//    4. 修改各处方法的方法体，将service的业务，转给mapper处理，也就是service依赖mapper来工作。
//    5. 表明身份，让Spring来管理 （一个包要被Spring容器接管，必须双向约定，一是，核心配置类。要扫描这个包，二是，被扫描包里类要声明自己愿意被管理）
//    6. 为了能让controller自动配置sevivce所以在serviceImpl上方添加@Data
    // todo: 三层架构的调用链： 利用属性自动装配的方式实现的
    //  1. controller 调用 service
    //  2. service 调用 mapper
    //  3. mapper 调用 mybatis


    @Autowired   // 自动装配，就是DI依赖注入
    private VideoMapper videoMapper;



    @Override
    public List<Video> selectAllVideos() {
        // service自己不干活，转包给mapper对象
        return videoMapper.selectAllVideos();
    }

    @Override
    public Video selectVideoById(int id) {
        // 一并把参数给传递给mapper代理
        return videoMapper.selectVideoById(id);
    }

    @Override
    public Boolean deleteVideoById(int id) {
        // mapper的delete,update,insert返回值是int
        // service的delete,update,insert返回值是Boolean
        // 受影响行数大于0，就是成功，返回true,否则false
        return videoMapper.deleteVideoBYId(id)>0;
    }

    @Override
    public Boolean insertVideo(Video video) {
        return videoMapper.insertVideo(video)>0;
    }

    @Override
    public Boolean updateVideo(Video video) {
        return videoMapper.updateVideo(video)>0;
    }
}
